package io;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

// 读文件（字节）
//使用byte数组的方法会更好，因为硬盘IO更少 消耗的时间更短 节省开销

public class Demo6 {
    public static void main(String[] args) throws IOException {
//        InputStream in = null;
//        try {
//            in = new FileInputStream("Demo.txt");
//
//            // 方法一：读取一个字节 返回-1 代表全部读取完
////            while (true) {
////                int b = in.read();
////                if (b == -1) {
////                    // 读取完毕
////                    return;
////                }
////                System.out.printf("0x%x ",b);
////            }
//
//            // 方法二：读取多个数据 返回-1代表读取完
////            byte[] bytes = new byte[1024];     //假设一次读取五个字节
////            int n = in.read(bytes);
////            System.out.println("n = " + n);
////            // 返回实际读到的数量
////            if (n == -1) {
////                //读取完毕
////                return;
////            }
////            for (int i = 0; i < n; i++) {
////                System.out.printf("0x%x ",bytes[i]);
////            }
//            System.out.println();
//        } finally {
//            in.close();
//        }


        //还有一种方法 可以防止漏掉 close；也可以更简洁
        try (InputStream in = new FileInputStream("Demo.txt")) {
//            while (true) {
//                int n = in.read();
//                if (n == -1) {
//                    return;
//                }
//                System.out.printf("0x%x ",n);
//            }

            while (true) {
                byte[] bytes = new byte[1024];
                int n = in.read(bytes);

                if (n == -1) {
                    return;
                }
                for (int i = 0; i < n; i++) {
                    System.out.printf("0x%x ",bytes[i]);
                }
            }
        }
    }
}
